﻿<html>
<head>
<title>GRUB4DOS 设备命名规则</title>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" >
<link href="cmd.css" rel="stylesheet" type="text/css">
</head>

<body>
<h1> grub4dos对于常规设备有两种命名规则，</h1>
<h3 class="style1">一种是 (ud) , (pd) , (nd) , (hd) , (cd) , (fd) 六种直观设备命令，可以对 hd 、 cd 、 fd 三种设备进行编号。</h3>
<blockquote>
  <p><span class="Options">ud</span> 为 bean 原创的 fbinst 启动方式制作的隐藏分区</p>
  <p><span class="Options">pd</span> 为 pxe device ，即pxe设备</p>
  <p><span class="Options">nd</span> 为 network device ，网络驱动器，现已不常用</p>
  <p><span class="Options">hd</span> 为 hard device ，磁盘类设备</p>
  <p><span class="Options">cd </span>为 cdrom device ，光驱类设备</p>
  <p><span class="Options">fd</span> 为 floppy device ，软驱类设备</p>
  <p>编号规则见下方示例。<br />
  </p>
</blockquote>
<h3>另一种是以 0x0 至 0xff 的值来命名所有设备。（此值名为 驱动器号 ）</h3>
<blockquote>
  <p>设备名 &nbsp; ： &nbsp;&nbsp;&nbsp; 驱动器号</p>
  <p><span class="bat">fd0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;:	&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 0x0</span><br />
    <span class="bat">fd1&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;:	&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 0x1</span><br />
    ...<br />
    <span class="Options">pxe&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;:	&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0x21</span><br />
    <span class="Options">ud&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;: 	&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0x23</span><br />
    ...<br />
    <span class="Options">hd0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;:	&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0x80</span><br />
    <span class="bat">hd1&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;:	&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0x81</span><br />
    ...<br />
    <span class="bat">cd&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;:  	&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0x9F</span> (这个不一定正确，视bios而定)<br />
    <span class="bat">hd32&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;:	&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0xA0</span><br />
    ...<br />
    <span class="Options">hd127&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;: &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0xFF</span></p>
  <p>注1：0x0-0x7F是提供给软盘镜像的（除特殊几个外，如 0x21 、 0x23）</p>
  <p>注2：(hd32) 是一个 grub 驱动器，驱动器号和 (0xA0) 等价。</p>
  <blockquote>
  <p class="style1">如果一个虚拟驱动器被指定为一个大于或等于0xA0 的驱动器号，那么它将被视为是一个光盘。（即，是 2048 字节的大扇区）</p></blockquote>
  <p>注3：(0xFF) 是最后一个CD/DVD设备 (如果用map命令映射(hd32)不工作的话请尝试用此参数)</p>
  <p>注4：使用 grub 设备时通常可以简写，如：</p>
  <blockquote>
    <blockquote>
      <p><span class="bat">(0) = (fd0)</span><br />
<span class="bat">(1) = (fd1)</span><br />
        ...<br />
        <span class="bat">(160) = (hd32)</span><br />
        ...</p>
    </blockquote>
  </blockquote>
  <p>注5： 引用 不点 的<a target="_blank" href="http://bbs.znpc.net/viewthread.php?tid=6017">说法</a>：</p>
  <blockquote>
    <p class="style1">BIOS 数据区中软盘个数最多也就是 4。DOS 只能认到 2 个，一个是 A 盘，一个是 B 盘。find 只能可靠访问 BIOS 数据区所承认的软盘。如果试图访问未承认的软盘，则有可能出问题（例如死机）。<span class="style1">自己虚拟的过多的软盘，不要指望 find 去查找。你可以用其它方法，例如 ls 命令来确定。</span><br />
    </p>
  </blockquote>
</blockquote>
<h1>同时还有对特殊设备的命名:</h1>
<blockquote>
  <p><span class="Options">()</span><span class="style1"> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;就是一对空括号，表示当前设备。</span></p>
  <p><span class="Options">(bd)&nbsp;</span><span class="style1">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; boot device ，通用写法，初始启动设备，可以使菜单更具通用性。注：使用configfile命令会改变启动设备。</span></p>
  <p class="style1"><span class="Options">(md) </span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;内存驱动器，实现了将整个内存作为一个磁盘驱动器来访问。（预留驱动器号 0xffff ）</p>
  <blockquote>
    <blockquote>
<p class="style1">注意： (md)只工作在支持BIOS中断int15/EAX=E820h的系统上。</p>
    </blockquote>
  </blockquote>
  <p class="style1"><span class="Options">(rd) </span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 随机存贮驱动器。(md) 设备访问内存是从物理地址 0 开始，而 (rd) 可以访问起始于任何基地址的内存。</p>
  <blockquote>
    <blockquote>
      <p class="style1">随机存贮器的基址与长度可以通过 map 命令指定。你甚至能够为(rd)驱动器指定一个BIOS驱动器号。</p>
      <p> <span class="style1">比如： &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="cmd">map --ram-drive=0xf0</span><span class="style1"> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;（注：默认的 (rd) 驱动器号是使用0x7F的软驱号）。</span></p>
      <p> <span class="style1">如果 (rd) 是硬盘驱动器镜像，你应该用大于或等于0x80的值来改变它的驱动器号。</span></p>
      <p class="style1"><span class="bat">(rd)+1</span>这个标志始终代表文件，它包含存储在(rd)中的所有字节。</p>
    </blockquote>
  </blockquote>
</blockquote>
<h3>示例：</h3>
<p>直观设备命名：</p>

<blockquote>
  <p>1、硬盘及分区编号 从 0 开始</p>
  <blockquote>
    <p>(hd<span class="Options">0</span>) -第一硬盘<br />
      (hd<span class="Options">1</span>) -第二硬盘<br />
      (hd<span class="Options">2</span>) -第三硬盘<br />
      等.<br>
      <br>
      特殊： (hd-1) -最后一块硬盘</p>
  </blockquote>
  <p>2、硬盘主分区编号从 0 开始至 3 结束，逻辑分区编号从 4 开始（MBR分区表）</p>
  <blockquote>
    <p>(hd#， <span class="Options">0</span>) -第一主分区(在硬盘上#)<br />
      (hd#， <span class="Options">1</span>) -第二主分区(在硬盘上#)<br />
      (hd#， <span class="Options">2</span>) -第三主分区(在硬盘上#)<br />
      (hd#， <span class="Options">3</span>) -第四主分区(在硬盘上#)<br>
      <br>
      (hd#， <span class="Options">4</span>) -第一逻辑分区(在硬盘上#)<br />
      (hd#， <span class="Options">5</span>) -第二逻辑分区(在硬盘上#)<br />
      (hd#， <span class="Options">6</span>) -第三逻辑分区(在硬盘上#)<br />
      (hd#， <span class="Options">7</span>) -第四逻辑分区(在硬盘上#)<br>
      等.</p>
  </blockquote>
  <p>例： </p>
  <blockquote>
    <p>(hd0,0) -第一硬盘上的第一主分区<br />
      (hd0,1) -第一硬盘上的第二主分区<br />
      (hd2,3) -第三硬盘上的第四主分区<br>
      <br>
      (hd0,4)  -第一硬盘上的第一逻辑分区<br />
      (hd2,10) -第三硬盘上的第七逻辑分区<br />
      (hd5,9)  -第六硬盘上的第六逻辑分区<br>
      <br>
      (hd-1,0)  -最后一块硬盘上的第一主分区<br>
      注意：<span class="style1">扩展分区属于主分区。如单硬盘上有五个分区， C 为第一主分区，D、E、F 为扩展分区上的逻辑分区，G 也为主分区，则，C 区为 (hd0,0)，D 区为 (hd0,4)，E 区为 (hd0,5)， F 区为 (hd0,6)，G 区为 (hd0,2)。</span><br />
    </p>
  </blockquote>
  <p>3、仿真CD/DVD设备编号为从(hd32)至(0xFF)</p>
  <blockquote>
    <p>(hd32) -第一虚拟CD/DVD设备<br />
      (hd33) -第二虚拟CD/DVD设备<br />
      (hd34) -第三虚拟CD/DVD设备<br />
      ......<br />
      (0xFF) -最后一个CD/DVD设备 (如果用map命令映射(hd32)不工作的话请尝试用此参数)</p>
  </blockquote>
  <p>4、物理CD/DVD设备编号从 0 开始</p>
  <blockquote>
    <p>(cd0) -第一CD/DVD设备<br />
      (cd1) -第二CD/DVD设备<br />
      等.</p>
  </blockquote>
  <p>5、软盘驱动器编号从 0 开始</p>
  <blockquote>
    <p>(fd0) -第一软盘驱动器<br />
      (fd1) -第二软盘驱动器<br />
      等.</p>
  </blockquote>
</blockquote>
<p>&nbsp;</p>
<h3>应用实例：</h3>
<blockquote>
  <p>1、通常可以使用设备编号来判断当前启动设备</p>
  <blockquote>
    <p>例：</p>
    <blockquote>
      <p><span class="cmd">checkrange 0x80 read 0x8280 &amp;&amp; echo boot from hdd<br>
      </span>#本次启动为从磁盘启动（本地磁盘和 USB-HDD 启动都将识别为 0x80 设备启动）</p>
      <p><span class="cmd">checkrange 0x21 read 0x8280 &amp;&amp; echo boot from pxe<br>
</span>#本次启动为 pxe 启动</p>
    </blockquote>
  </blockquote>
  <p>2、高级用法（by zhaohj@wuyou）：</p>
  <blockquote>
    <p>偏移&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;类型&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;内容</p>
    <p>410H&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;字&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;该字保存与计算机连接的设备编码表，BIOS中断11H(设备测定)可返回此信息。</p>
    <p>位</p>
    <p>0                  &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;软驱安装标志，此位为0表示没有软驱。</p>
    <p>1                                    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;数字协处理器安装标志，此位为0表示未安装协处理器。</p>
    <p>3-2                                   &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;系统板RAM的大小，适用于一些旧机型，PS2型未使用。(00=16K，01=32K，10=48K，11=64K)。</p>
    <p>5-4                                                    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;初始显示方式。(00=AG，01=CGA-40，10=CGA-80，11=MDA-80)。</p>
    <p>7-6                                                    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;软驱的数量，当位0为1时有效。(00=1，01=2，10=3，11=4)。</p>
    <p>-------------------</p>
    <p>说明bios最多允许4个软驱</p>
    <blockquote>
      <p><span class="cmd">wenv calc aa=*0x410&amp;1</span><br />
        <span class="cmd">wenv check aa&lt;&gt;0  calc aa=*0x410&gt;&gt;6&amp;0xf+1</span></p>
    </blockquote>
    <p>计算得到当前软驱数量</p>
  </blockquote>
</blockquote>
</body>
</html>
